import random

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from io import StringIO

# numpy学习
a = np.array([2, 3, 4])  # print(np.sqrt(a))
b = np.array([1.2, 3.5, 5.1])  # print(b.dtype)
c = np.arange(1, 6)  # print(c)
d = np.arange(12).reshape(4, 3)  # print(d.shape)
e = np.arange(24).reshape(2, 3, 4)  # print(e.T)
# f1 = open("some.csv")
# print(open("some.csv").read())
file1 = open("output1.txt", "w")
# np数组输出.csv如下
out = np.loadtxt("../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv", delimiter=",",  usecols=(5, 6, 7),
                 dtype=int)
# print(out.shape)
# print(out, file=file1)
# skiprows=2, 就会跳过前两行,comment的是指, 如果行的开头为#就会跳过该行,unpack是指会把每一列当成一个向量输出
out2 = np.loadtxt("../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv", delimiter=",", skiprows=2,
                  usecols=(5, 6, 7), dtype=int, comments='#', unpack=True)
# print(out2)


# matplotlib学习
x_data = np.arange(10)
n_data = np.random.rand(10)
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
ax[0].plot(x_data, n_data)
ax[1].plot([1, 2, 3, 4, 5])
ax[1].grid(True)  # 开启网格
ax[0].set_title("I am title")
ax[1].set_xlabel("I am xlabel")
# fig=plt.figure()
# ax=fig.add_axes([0,0,1,1])
# plt.show()
# 可视化.csv文件
x_array = np.arange(1948)
y_array = np.loadtxt("../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv", delimiter=",",  usecols=5, dtype=int)
y_array2 = np.loadtxt("../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv", delimiter=",",  usecols=5, dtype=int)
y_array3 = np.loadtxt("../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv", delimiter=",",  usecols=5, dtype=int)
# print(y_array)
fig2, ax2 = plt.subplots(1, 3, figsize=(12, 4))
ax2[0].plot(x_array, y_array, 'y')
ax2[0].set_title('The column6')
ax2[0].grid(color='b', lw=0.5)

ax2[1].plot(x_array, y_array2, 'b')
ax2[1].set_title('The column7')
ax2[1].grid(color='r', lw=0.5)

ax2[2].plot(x_array, y_array3, 'r')
ax2[2].set_title('The column8')
ax2[2].grid(color='g', lw=0.5)
# plt.show()


# pandas学习
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=pd.date_range('20130102', periods=6))
# print(s)
s2 = pd.DataFrame(np.random.randn(8, 4), index=pd.date_range('20130102', periods=8), columns=['A', 'B', 'C', 'D'])
# print(s2[:2])
# pandas.read_csv相关知识
data = ("col1,col2,col3\n"
        "a,b,1\n"
        "a,b,2\n"
        "c,d,3")
y1 = pd.read_csv(StringIO(data))
y2 = pd.read_csv(StringIO(data), usecols=lambda x: x.upper() in ['COL1', 'COL3'])  # 取列
y3 = pd.read_csv(StringIO(data), skiprows=lambda x: x % 2 != 0)  # 取行
# print(y2, "\n", y3)
path = '../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv'
y_pd = pd.read_csv(path, usecols=[5, 6, 7], names=['col6', 'col7', 'col8'])
# print(y_pd)
# y_pd.plot.bar(x="col6", y="col7")
x_pd1 = random.randint(1, 100)
y_pd1 = pd.read_csv('../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv', usecols=[5], names=["data"])
# print(y_pd1)
# y_pd1.plot(x="", y="data")

fig3, ax3 = plt.subplots(2, 1)
ax3[0].plot(y_pd1)
# 创建带有黄色背景的第二个子图
y_pd2 = pd.read_csv('../csv_6axis/200Hz_5Vfan-1-vd2-friction2.csv', usecols=[6])
ax3[1].plot(y_pd2)
# plt.subplot(212, facecolor='y')
# plt.plot(y_pd2)
# plt.show()


# 还有一个思考题：电脑的实时性不高，很难做到精确按照几百甚至上万Hz的速度输出数据。然而，真实的传感器是可以通过一个
# 引脚来通知主控制器定期收数据的。主控制器也不一定都满足这个实时性要求。那么，应该如何精确按照指定的采样率输出数据呢？
# 提示：真实的传感器一般都有内部数据缓冲区。
# 答：通过USB和PC机进行及时的数据交换,以保证整个系统的实时性。
# 在Window系统下,From Wave Device模块实时地从传声器录入音频信号数据。在仿真过程中将“实时地”从音频接口读入一个连续的音频数据流数据,
# 由于从声卡硬件输入音频数据是真正实时的,所以必须通过数据缓冲来达到与声卡的速率匹配,以保证读入的音频数据不丢失。
#
# 仿真开始时,音频设备开始以指定的采样速率向缓冲区写入数据,而From Wave Device模块立即按照先进先出(FIFO)的原则从缓冲区读出数据，
# 并将这些数据组成指定长度的数据帧输出。如果缓冲区设置过小,可能造成来不及读输入的数据而造成数据丢失或硬件错误,
# 这时可适当增加缓冲区加以解决,也可以增加数据帧长度来提高读取效率。
#


